AnĂ¡lisis de Series Temporales
IOT Analytics
PreparaciĂ³n para analizar los datos. Series temporales
Objetivo
ProyecciĂ³n del consumo energĂ©tico a travĂ©s de series temporales.
Procedimiento
Estudiaremos los datos de consumo energético correspondientes a los años 2007 a 2009 a través de series temporales.
Haremos proyecciĂ³n de futuro para el año 2010 y compararemos los resultados con los datos reales de este Ăºltimo año (serie real).
Plot POA
Vamos a analizar la serie temporal del submedidor 3, aire acondicionado y termo elĂ©ctrico. Vamos a extraer 52 observaciones opr año, esto es igual a una observaciĂ³n diaria. Lunes a las 20h. Años 2007, 2008 y 2009
EvoluciĂ³n mensual del consumo. Años 2007-2009
Vamos a representar la serie por meses para cada submedidor y tambien para la energĂa global co granularidad mensual. En este caso, la frecuencia serĂ¡ 12, tenemos una observaciĂ³n por mes para los años 2007,8 y 2009.
Parece que los datos tienen estacionariedad (movimientos que se repiten cada año), esto ocurre para todas las variables.
EvoluciĂ³n diaria del consumo por meses
En este caso, crearemos una serie para cada mes, ya que la frecuencia de los datos no serĂ¡ la misma, al tener cada mes un nĂºmero de dĂas diferente.
Mes de Enero
Parece que no existen muchos patrones que nos podrĂan ayudar a hacer predicciones, no serĂan muy fiables. (grĂ¡fica muelle)
Mes de Febrero
Mes de Marzo
EvoluciĂ³n semanal del consumo. Años 2007-2009
Vamos a representar la serie por meses para cada submedidor y tambien para la energĂa global co granularidad mensual. En este caso, la frecuencia serĂ¡ 12, tenemos una observaciĂ³n por mes para los años 2007,8 y 2009.
Muelle
Forecasting antes de descomponer la serie
Vamos a plicar regresiĂ³n lineal a cada serie temporal, y veremos el valor de \(R^2\) y del error cuadrĂ¡tico medio.
EvoluciĂ³n mensual del consumo. Años 2007-2009
Modelo
Call:
tslm(formula = tsSM3_070809weekly ~ trend + season)
Residuals:
Min 1Q Median 3Q Max
-14.0000 -5.1012 -0.3333 1.2321 20.5654
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 10.10900 4.09735 2.467 0.0152 *
trend -0.01087 0.01462 -0.744 0.4586
season2 -3.52184 6.01621 -0.585 0.5596
season3 -3.84430 6.01534 -0.639 0.5242
season4 -9.50009 6.01451 -1.580 0.1173
season5 -3.82255 6.01371 -0.636 0.5264
season6 2.18832 6.01294 0.364 0.7166
season7 -4.13414 6.01222 -0.688 0.4932
season8 -9.45660 6.01152 -1.573 0.1187
season9 -3.77906 6.01086 -0.629 0.5309
season10 -3.76818 6.01024 -0.627 0.5321
season11 1.90936 6.00966 0.318 0.7513
season12 -3.41310 6.00910 -0.568 0.5713
season13 -9.40223 6.00859 -1.565 0.1207
season14 -9.39136 6.00811 -1.563 0.1211
season15 -3.04715 6.00766 -0.507 0.6131
[ reached getOption("max.print") -- omitted 37 rows ]
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 7.863 on 104 degrees of freedom
Multiple R-squared: 0.2639, Adjusted R-squared: -0.1042
F-statistic: 0.7169 on 52 and 104 DF, p-value: 0.9077
Resultados:
Valor del coeficiente de determinaciĂ³n: 0.2639. Es un valor muy bajo, el modelo Ăºnicamente explica el 28% de la variabilidad total.
No hay coeficientes significativamente no nulos (p.valores > 0.05). El modelo los supone todos nulos (significativamente)
PredicciĂ³n IC
PredicciĂ³n para los prĂ³ximos 20 dĂas
HabĂa predicciones negativas, esto es muy grave. No puede haber un consumo negativo de energĂa.
EvoluciĂ³n diaria del consumo por meses
Modelo
Call:
tslm(formula = tsSM3_DiariaEnero ~ trend + season)
Residuals:
Min 1Q Median 3Q Max
-5223.2 -1643.5 -128.2 1968.5 6090.7
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7359.3708 1811.1381 4.063 0.00014 ***
trend -0.8762 12.5325 -0.070 0.94449
season2 1941.2095 2497.7856 0.777 0.44006
season3 -337.9143 2497.8799 -0.135 0.89284
season4 1701.2952 2498.0371 0.681 0.49842
season5 2241.8380 2498.2572 0.897 0.37305
season6 1754.3809 2498.5401 0.702 0.48525
season7 3264.9237 2498.8858 1.307 0.19627
season8 5867.7999 2499.2943 2.348 0.02215 *
season9 2021.6760 2499.7656 0.809 0.42180
season10 3640.5522 2500.2996 1.456 0.15051
season11 1613.7617 2500.8963 0.645 0.52117
season12 2887.3045 2501.5556 1.154 0.25292
season13 4624.5140 2502.2776 1.848 0.06943 .
season14 3936.0569 2503.0621 1.572 0.12101
season15 5955.9331 2503.9090 2.379 0.02052 *
[ reached getOption("max.print") -- omitted 16 rows ]
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3059 on 61 degrees of freedom
Multiple R-squared: 0.3269, Adjusted R-squared: -0.01514
F-statistic: 0.9557 on 31 and 61 DF, p-value: 0.5438
Resultados:
Valor del coeficiente de determinaciĂ³n: 0.3269. Es un valor muy bajo, el modelo Ăºnicamente explica el 28% de la variabilidad total.
Solo hay tres coeficientes significativamente no nulos
PredicciĂ³n IC
EvoluciĂ³n semanal del consumo. Años 2007-2009
Submetering 1
Modelo
Call:
tslm(formula = tsSM1_Semanal ~ trend + season)
Residuals:
Min 1Q Median 3Q Max
-11708 -2978 1845 4714 7123
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 59656.6 4512.2 13.221 6.48e-09 ***
trend -508.6 263.8 -1.928 0.07593 .
season2 12293.0 5646.7 2.177 0.04850 *
season3 23297.9 5665.1 4.113 0.00122 **
season4 7005.5 5695.7 1.230 0.24051
season5 13062.8 5738.3 2.276 0.04039 *
season6 81428.1 5792.6 14.057 3.07e-09 ***
season7 91174.1 5858.3 15.563 8.75e-10 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 6908 on 13 degrees of freedom
Multiple R-squared: 0.975, Adjusted R-squared: 0.9616
F-statistic: 72.49 on 7 and 13 DF, p-value: 2.122e-09
Resultados:
Valor del coeficiente de determinaciĂ³n: 0.04277. Es un valor extremadamente bajo, el modelo Ăºnicamente explica el 4.8% de la variabilidad total. Las predicciones no serĂ¡n nada fiables
Solo hay un coeficiente significativamente no nulo
PredicciĂ³n IC
Predicciones nada fiables, ademĂ¡s de los gigantes IC
Submetering 2
Modelo
Call:
tslm(formula = tsSM2_Semanal ~ trend + season)
Residuals:
Min 1Q Median 3Q Max
-34037 -13452 -3470 8762 38539
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 88194.9 15111.4 5.836 5.82e-05 ***
trend -2641.6 883.3 -2.991 0.010427 *
season2 43786.9 18910.7 2.315 0.037565 *
season3 73582.1 18972.5 3.878 0.001903 **
season4 -4120.0 19075.0 -0.216 0.832350
season5 28106.0 19217.7 1.463 0.167355
season6 64649.2 19399.5 3.333 0.005399 **
season7 83987.4 19619.5 4.281 0.000895 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 23140 on 13 degrees of freedom
Multiple R-squared: 0.7717, Adjusted R-squared: 0.6487
F-statistic: 6.276 on 7 and 13 DF, p-value: 0.002282
Resultados:
- Valor del coeficiente de determinaciĂ³n: 0.7717. No es un mal ajuste
PredicciĂ³n IC
Predicciones nada fiables, ademĂ¡s de los gigantes IC
Submetering 3
Modelo
Call:
tslm(formula = tsSM3_Semanal ~ trend + season)
Residuals:
Min 1Q Median 3Q Max
-50070 -20032 -1703 18539 49320
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 410909 20033 20.511 2.76e-11 ***
trend 5485 1171 4.684 0.000427 ***
season2 4110 25070 0.164 0.872309
season3 -5833 25152 -0.232 0.820231
season4 -45960 25288 -1.817 0.092260 .
season5 16778 25477 0.659 0.521682
season6 36018 25718 1.401 0.184776
season7 -48786 26010 -1.876 0.083330 .
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 30670 on 13 degrees of freedom
Multiple R-squared: 0.7601, Adjusted R-squared: 0.6309
F-statistic: 5.884 on 7 and 13 DF, p-value: 0.00305
Resultados:
Valor del coeficiente de determinaciĂ³n: 0.7601.
Solo hay dos coeficientes significativamente no nulos
PredicciĂ³n IC
Predicciones nada fiables, ademĂ¡s de los gigantes IC
ComparaciĂ³n de los coeficientes de cada modelo
Submedidor RMSE R2
1 Cocina 24509.62 0.04277
2 Lavadero 22414.30 0.18390
3 AC y TermoE 65773.10 0.04866
Forecasting descomponiendo la serie (asĂ ok)
Descomponer: quitar tendencia
DescomposiciĂ³n y visualizaciĂ³n
POA
Length Class Mode
x 157 ts numeric
seasonal 157 ts numeric
trend 157 ts numeric
random 157 ts numeric
figure 52 -none- numeric
type 1 -none- character
Observamos una fuerte dependencia de la componente estacional.
EvoluciĂ³n semanal del consumo. Años 2007-2009
Submetering 1
Length Class Mode
x 21 ts numeric
seasonal 21 ts numeric
trend 21 ts numeric
random 21 ts numeric
figure 7 -none- numeric
type 1 -none- character
Componente estacional muy fuerte, tendencia no.
Submetering 2
Length Class Mode
x 21 ts numeric
seasonal 21 ts numeric
trend 21 ts numeric
random 21 ts numeric
figure 7 -none- numeric
type 1 -none- character
Submetering 3
Length Class Mode
x 21 ts numeric
seasonal 21 ts numeric
trend 21 ts numeric
random 21 ts numeric
figure 7 -none- numeric
type 1 -none- character
EvoluciĂ³n mensual del consumo. Años 2007-2009
Submetering 1
Length Class Mode
x 36 ts numeric
seasonal 36 ts numeric
trend 36 ts numeric
random 36 ts numeric
figure 12 -none- numeric
type 1 -none- character
Componente estacional muy fuerte, tendencia no.
Submetering 2
Length Class Mode
x 36 ts numeric
seasonal 36 ts numeric
trend 36 ts numeric
random 36 ts numeric
figure 12 -none- numeric
type 1 -none- character
Submetering 3
Length Class Mode
x 36 ts numeric
seasonal 36 ts numeric
trend 36 ts numeric
random 36 ts numeric
figure 12 -none- numeric
type 1 -none- character
EvoluciĂ³n diaria del consumo por meses para los años 2007-2009
Submetering 1
Length Class Mode
x 93 ts numeric
seasonal 93 ts numeric
trend 93 ts numeric
random 93 ts numeric
figure 31 -none- numeric
type 1 -none- character
Tendencia creciente, parece que no hay mucha estacionalidad.
Submetering 2
Length Class Mode
x 93 ts numeric
seasonal 93 ts numeric
trend 93 ts numeric
random 93 ts numeric
figure 31 -none- numeric
type 1 -none- character
Submetering 3
Length Class Mode
x 93 ts numeric
seasonal 93 ts numeric
trend 93 ts numeric
random 93 ts numeric
figure 31 -none- numeric
type 1 -none- character
PredicciĂ³n con Holt-Winters (suavizado exponencial)
POA
AĂºn parece que hay estacionalidad, pero la escala es tan pequeña que es prĂ¡cticamente nula, por tanto, asumimos estacionalidad.
Una vez que hemos eliminado la compoenente estacional, podemos hacer predicciones
Suavizado exponencial de HoltWinters
PronĂ³stico de HoltWinters
Vamos a predecir las prĂ³ximas 25 observaciones.
La predicciĂ³n es diferente que sin desestacionalizar la serie.
EvoluciĂ³n semanal del consumo. Años 2007-2009
Cocina
Parece un muelle.
Suavizado exponencial de HoltWinters
PronĂ³stico de HoltWinters
Vamos a predecir las prĂ³ximas 25 observaciones.
La predicciĂ³n es diferente que sin desestacionalizar la serie.
Lavadero
Parece un muelle.
Suavizado exponencial de HoltWinters
PronĂ³stico de HoltWinters
Vamos a predecir las prĂ³ximas 25 observaciones.
AnĂ¡lisis de series temporales con metodologĂa Box-Jenkis
Paso 1. Lectura y representaciĂ³n grĂ¡fica de los datos
Paso 2. Transformaciones para que la varianza sea estable en el tiempo
[1] 2
[1] -1.1 2.0
Usando la familia de transformaciones BoxCox, nos sugiere un valor de lambda = 2. El valor 1 (no transformar) estĂ¡ en el intervalo, al igual que el 0 (transformaciĂ³n logarĂtmica)
No transformamos los datos.
Ahora parece que las oscilaciones no crecen con el tiempo.
Paso 3. Transformaciones para que la media sea estable en el tiempo
[1] 1
[1] 0
Diferencia regular:
[1] 0
Paso 4. Contrastar la estacionariedad
Test de raiz unitaria.
Augmented Dickey-Fuller Test
data: tsSM3_SemanalDif
Dickey-Fuller = -6.2783, Lag order = 2, p-value = 0.01
alternative hypothesis: stationary
No existen evidencias significativas para afirmar que los datos no sean estacionarios. La media es estable en el tiempo.
Paso 5. Identificar la estructura ARIMA
MA(0) y AR(0).
Pasos 6 y 7. EstimaciĂ³n de parĂ¡metros y diagnĂ³stico
modelo ARIMA(0,1,0)xARIMA(0,1,0)
Call:
arima(x = tsSM3_Semanal, order = c(0, 1, 0), seasonal = list(order = c(0, 0,
0), period = 7))
sigma^2 estimated as 3.489e+09: log likelihood = -248.11, aic = 496.21
Ljung-Box test
data: Residuals from ARIMA(0,1,0)
Q* = 11.143, df = 4, p-value = 0.025
Model df: 0. Total lags used: 4
Pasa la diagnosis: p-value = 0.025. El modelo es vĂ¡lido.
Series: tsSM3_Semanal
ARIMA(3,1,0) with drift
Coefficients:
ar1 ar2 ar3 drift
-1.2341 -1.1548 -0.6579 6092.903
s.e. 0.2171 0.1892 0.2114 1912.826
sigma^2 = 1.26e+09: log likelihood = -237.16
AIC=484.31 AICc=488.6 BIC=489.29
Modelo propuesto: ARIMA(3,1,0)
aicAutoArima = 496.21 AICModelo1=484.31
Ljung-Box test
data: Residuals from ARIMA(3,1,0) with drift
Q* = 2.8112, df = 3, p-value = 0.4217
Model df: 4. Total lags used: 7
No pasa la diagnosis, el modelo no es vĂ¡lido.
Nos quedamos con el modelo 1.
Paso 8. PredicciĂ³n de los resultados
AnĂ¡lisis de series temporales con metodologĂa Box-Jenkis
Paso 1. Lectura y representaciĂ³n grĂ¡fica de los datos
Paso 2. Transformaciones para que la varianza sea estable en el tiempo
$lambda
[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8
[20] 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0
$loglike
[1] 60.59893 61.94022 63.21125 64.41278 65.54554 66.61042 67.60826 68.54006
[9] 69.40675 70.20950 70.94950 71.62807 72.24657 72.80648 73.30932 73.75668
[17] 74.15020 74.49138 74.78224 75.02434 75.21938 75.36934 75.47536 75.53934
[25] 75.56288 75.54757 75.49491 75.40640 75.28345 75.12745 74.93970
$mle
[1] 2.4
$ci
[1] 1.5 3.0
[1] 2.4
[1] 1.5 3.0
Usando la familia de transformaciones BoxCox, nos sugiere un valor de lambda = 2. Datos al cuadrado
Ahora parece que las oscilaciones no crecen con el tiempo.
Paso 3. Transformaciones para que la media sea estable en el tiempo
[1] 0
[1] 1
Diferencia estacional:
[1] 0
Paso 4. Contrastar la estacionariedad
Test de raiz unitaria.
Augmented Dickey-Fuller Test
data: tsSM3_MensualTransfDif
Dickey-Fuller = -2.6388, Lag order = 2, p-value = 0.329
alternative hypothesis: stationary
Los datos no son estacionarios
AnĂ¡lisis de series temporales con metodologĂa Box-Jenkis
Paso 1. Lectura y representaciĂ³n grĂ¡fica de los datos
Paso 2. Transformaciones para que la varianza sea estable en el tiempo
$lambda
[1] -2.0 -1.9 -1.8 -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -1.1 -1.0 -0.9 -0.8 -0.7 -0.6
[16] -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
[31] 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0
$loglike
[1] 40.41714 49.70541 58.70562 67.39835 75.76458 83.78614 91.44630
[8] 101.83094 108.87858 115.51343 121.72737 130.88686 136.60423 141.89554
[15] 146.76202 151.20925 155.24692 158.88832 162.14974 165.04970 167.60816
[22] 169.84573 171.78305 173.44024 174.83650 175.98980 176.91676 177.63258
[29] 178.15104 178.48455 178.64424 178.64010 178.48108 178.17518 177.72962
[36] 177.15091 176.44494 175.61708 174.67228 173.61506 172.44964
$mle
[1] 1
$ci
[1] 0.6 1.5
[1] 1
[1] 0.6 1.5
Usando la familia de transformaciones BoxCox, nos sugiere un valor de lambda = 1.
No transformamos los datos.
Paso 3. Transformaciones para que la media sea estable en el tiempo
[1] 1
[1] 0
Diferencia regular:
[1] 0
Paso 4. Contrastar la estacionariedad
Test de raiz unitaria.
Augmented Dickey-Fuller Test
data: tsSM3_DiariaEneroDif
Dickey-Fuller = -4.6528, Lag order = 4, p-value = 0.01
alternative hypothesis: stationary
No existen evidencias significativas para afirmar que los datos no sean estacionarios. La media es estable en el tiempo.
Muelle
Paso 5. Identificar la estructura ARIMA
Pasos 6 y 7. EstimaciĂ³n de parĂ¡metros y diagnĂ³stico
modelo ARIMA(0,1,0)xARIMA(0,1,0)
2.5 % 97.5 %
ma1 -1.085034 -0.9149655
Call:
arima(x = tsSM3_DiariaEnero, order = c(0, 1, 1), seasonal = list(order = c(0,
0, 0), period = 31))
Coefficients:
ma1
-1.0000
s.e. 0.0434
sigma^2 estimated as 9218630: log likelihood = -870.5, aic = 1743
No hay coeficientes significativamente no nulos. Modelo: ARIMA(0,1,1)x(0,0,0)
Ljung-Box test
data: Residuals from ARIMA(0,1,1)
Q* = 42.097, df = 18, p-value = 0.001072
Model df: 1. Total lags used: 19
Pasa la diagnosis: p-value = 0.001072. El modelo es vĂ¡lido.
Series: tsSM3_DiariaEnero
ARIMA(2,1,1)(1,0,0)[31]
Coefficients:
ar1 ar2 ma1 sar1
-0.4695 -0.4003 -0.4286 -0.0117
s.e. 0.1675 0.1299 0.1829 0.1403
sigma^2 = 9691406: log likelihood = -869.07
AIC=1748.14 AICc=1748.83 BIC=1760.75
Modelo propuesto: ARIMA(2,1,1)(1,0,0)[31]
aicAutoArima = 1748.14 AICModelo1 = aic = 1743
Ljung-Box test
data: Residuals from ARIMA(2,1,1)(1,0,0)[31]
Q* = 25.83, df = 15, p-value = 0.03985
Model df: 4. Total lags used: 19
Pasa la diagnosis: 0.03985
Nos quedamos con el modelo 1.